{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sisl\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the first couple of examples, we have *played* with the graphene lattice and nearest neighbour interaction.  \n",
    "\n",
    "In this example, you should compare the band-structure of a nearest neighbour graphene model and a 3rd nearest neighbour model.\n",
    "\n",
    "To help you, I here list the tight-binding parameters that you should use (see [Hancock et. al](http://www.dx.doi.org/10.1103/PhysRevB.81.245402)):\n",
    "\n",
    "|  | $t_1$ | $t_2$ | $t_3$ | $s_1$ | $s_2$ | $s_3$ |\n",
    "| --- | --- | --- | --- | --- | --- | --- |\n",
    "| A | 2.7 |\n",
    "| D | 2.7 | 0.2 | 0.18  |\n",
    "| F | 2.7 | 0.09 | 0.27  | 0.11  | 0.045 | 0.065 | \n",
    "\n",
    "Note that we have listed 3 tight-binding model parameters, $t_i$ is the coupling to the $i$th nearest neighbour.  \n",
    "Sets A and D are *orthogonal* basis sets, while F is a non-orthogonal basis set.  \n",
    "Start by examining set A and D together, then if you wish, try out the non-orthogonal basis set.\n",
    "\n",
    "When creating Hamiltonian parameters for the 3rd nearest neighbour model, it is imperative that the orbital has the correct radius. The default radius of the graphene orbital is the bond-distance (1.42), i.e."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "print(sisl.geom.graphene().atom)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Lists that the maximum orbital radius is 1.43420. Notice it is slightly above the actual bond-distance. This is because we are dealing with floating point numbers where it is crucial to have a certain margin of error when calculating the distance between two atoms (especially for large structures), hence we can without problems increase the radius by a fraction of an Angstrom.\n",
    "\n",
    "In the 3rd nearest neighbour model, it is important to increase the range to capture the distance to the 3rd nearest neighbour. \n",
    "\n",
    "1. First figure out the distance (either by geometry, or by using `.distance` function with a *very large* `R` value)\n",
    "2. Create a graphene unit cell with the correct radius for the Carbon atom (`Atom(6, R=...)`)  \n",
    "   There are multiple ways of doing this, the easiest is to create the geometry from scratch.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
